#ifndef __CE_GFX_CAMERA_H__
#define __CE_GFX_CAMERA_H__

#include <export.h>
#include <math/matrix.h>
#include <math/vector.h>


class ceSector;

/**
 * \addtogroup graphics
 * @{
 */

/**
 * @brief Implementation of a camera.
 */
class CE_API ceCamera
{
private:
  ceVector3f   _eye;
  ceVector3f   _spot;
  ceVector3f   _up;

  ceMatrix4f   _matrix;
  ceMatrix4f   _matrixInv;

  ceSector*			_sector;
public:
  ceCamera();
  ~ceCamera ();

  void SetEye (const ceVector3f& eye);
  const ceVector3f& GetEye () const;

  void SetSpot (const ceVector3f& spot);
  const ceVector3f& GetSpot () const;

  void SetUp (const ceVector3f& up);
  const ceVector3f& GetUp () const;

  void FinishTransformation();
  const ceMatrix4f& GetMatrix () const;
  const ceMatrix4f& GetMatrixInv () const;

  void SetSector (ceSector* sector);
  ceSector* GetSector ();
  ceSector* GetSector () const;

  ceVector3f GetPosInfront (float distance) const;

};

/** @} */

#endif /* ! __CE_GFX_CAMERA_H__ */
